package com.rrd.dw.mr.gzip.kafka;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ucredit.babel.common.model.BaseModel;
import com.ucredit.babel.common.model.RecordType;
import com.ucredit.babel.common.model.third.icekredit.IceKreditData;
import com.ucredit.babel.common.model.third.icekredit.IceKreditRecord;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper.Context;

import java.io.IOException;

/**
 * 冰鉴征信查询服务
 *
 * @author renzhanzheng
 */

public class IceKreditParse extends ParseBase {

    private Text val = new Text();
    private Text key = new Text();

    /**
     * 冰鉴征信查询服务
     *
     * @param model
     * @throws IOException
     * @throws InterruptedException
     * @return
     */
    @Override
    public boolean parseJob(Context context, BaseModel<?> model, String successful) throws IOException, InterruptedException {

        IceKreditRecord obj = (IceKreditRecord) model;
        IceKreditData data = obj.getData();
        JSONObject info = data.getData() == null ? new JSONObject() : JSON.parseObject(data.getData());
        JSONObject result = info.getJSONObject("result") == null ? new JSONObject() : info.getJSONObject("result");
        JSONObject multi_loan = result.getJSONObject("multi_loan") == null ? new JSONObject() : result.getJSONObject("multi_loan");
        JSONObject apply_result = multi_loan.getJSONObject("apply_result") == null ? new JSONObject() : multi_loan.getJSONObject("apply_result");

        StringBuilder sb = getBaseInfo(obj, successful);

        //系统响应标示
        sb.append(info.getString("response_code")).append(CRT001);
        //系统响应信息
        sb.append(info.getString("message")).append(CRT001);
        //链路追踪码
        sb.append(info.getString("trace_id")).append(CRT001);
        //申请时间
        sb.append(multi_loan.getString("apply_date")).append(CRT001);
        //身份证号
        sb.append(apply_result.getString("id")).append(CRT001);
        //手机号
        sb.append(apply_result.getString("mobile")).append(CRT001);
        //姓名
        sb.append(apply_result.getString("name")).append(CRT001);
        //0-查得\1-未查的
        sb.append(apply_result.getString("query_status")).append(CRT001);
        //近7日APP使用次数
        sb.append(apply_result.getString("app_use_times_D7")).append(CRT001);
        //近1个月APP使用次数
        sb.append(apply_result.getString("app_use_times_M1")).append(CRT001);
        //近3个月APP使用次数
        sb.append(apply_result.getString("app_use_times_M3")).append(CRT001);
        //近近半年APP使用次数
        sb.append(apply_result.getString("app_use_times_M6")).append(CRT001);
        //近1年APP使用次数
        sb.append(apply_result.getString("app_use_times_M12")).append(CRT001);
        //首次APP使用时间距今时长
        sb.append(apply_result.getString("app_first_use_long")).append(CRT001);
        //最近一次APP使用时间距今时长
        sb.append(apply_result.getString("app_last_use_long")).append(CRT001);
        //近1个月平均APP使用时间间隔
        sb.append(apply_result.getString("app_use_delta_time_M1")).append(CRT001);
        //近3个月平均APP使用时间间隔
        sb.append(apply_result.getString("app_use_delta_time_M3")).append(CRT001);
        //近6个月平均APP使用时间间隔
        sb.append(apply_result.getString("app_use_delta_time_M6")).append(CRT001);
        //近12个月平均APP使用时间间隔
        sb.append(apply_result.getString("app_use_delta_time_M12")).append(CRT001);
        //近1个月平均APP使用时间间隔与近12个月平均APP使用时间间隔比例
        sb.append(apply_result.getString("app_delta_ratio_M1_M12")).append(CRT001);
        //近1个月单日最大APP使用次数
        sb.append(apply_result.getString("app_use_times_max_daily_M1")).append(CRT001);
        //近3个月单日最大APP使用次数
        sb.append(apply_result.getString("app_use_times_max_daily_M3")).append(CRT001);
        //近6个月单日最大APP使用次数
        sb.append(apply_result.getString("app_use_times_max_daily_M6")).append(CRT001);
        //近12个月单日最大APP使用次数
        sb.append(apply_result.getString("app_use_times_max_daily_M12")).append(CRT001);
        //近6个月单月最大APP使用次数
        sb.append(apply_result.getString("app_use_times_max_monthly_M6")).append(CRT001);
        //近1个月按天最大连续使用APP次数
        sb.append(apply_result.getString("app_con_use_times_max_daily_M1")).append(CRT001);
        //近3个月按天最大连续使用APP次数
        sb.append(apply_result.getString("app_con_use_times_max_daily_M3")).append(CRT001);
        //近6个月按天最大连续使用APP次数
        sb.append(apply_result.getString("app_con_use_times_max_daily_M6")).append(CRT001);
        //近12个月按天最大连续使用APP次数
        sb.append(apply_result.getString("app_con_use_times_max_daily_M12")).append(CRT001);
        //近6个月最大连续申请月份数
        sb.append(apply_result.getString("app_con_use_months_max_M6")).append(CRT001);
        //近6个月有APP使用的月份数
        sb.append(apply_result.getString("app_use_months_M6")).append(CRT001);
        //近7天夜间APP使用次数
        sb.append(apply_result.getString("app_use_times_night_D7")).append(CRT001);
        //近1个月夜间APP使用次数
        sb.append(apply_result.getString("app_use_times_night_M1")).append(CRT001);
        //近3个月夜间APP使用次数
        sb.append(apply_result.getString("app_use_times_night_M3")).append(CRT001);
        //近6个月夜间APP使用次数
        sb.append(apply_result.getString("app_use_times_night_M6")).append(CRT001);
        //近12个月夜间APP使用次数
        sb.append(apply_result.getString("app_use_times_night_M12")).append(CRT001);
        //近7日APP使用个数
        sb.append(apply_result.getString("app_use_num_D7")).append(CRT001);
        //近7日大众高粘性APP使用个数
        sb.append(apply_result.getString("app_mass_high_num_D7")).append(CRT001);
        //近7日大众中粘性APP使用个数
        sb.append(apply_result.getString("app_mass_middle_num_D7")).append(CRT001);
        //近7日大众低粘性APP使用个数
        sb.append(apply_result.getString("app_mass_low_num_D7")).append(CRT001);
        //近7日大众无粘性APP使用个数
        sb.append(apply_result.getString("app_mass_none_num_D7")).append(CRT001);
        //近7日小众高粘性APP使用个数
        sb.append(apply_result.getString("app_minor_high_num_D7")).append(CRT001);
        //近7日小众中粘性APP使用个数
        sb.append(apply_result.getString("app_minor_middle_num_D7")).append(CRT001);
        //近7日小众低粘性APP使用个数
        sb.append(apply_result.getString("app_minor_low_num_D7")).append(CRT001);
        //近7日小众无粘性APP使用个数
        sb.append(apply_result.getString("app_minor_none_num_D7")).append(CRT001);
        //近1个月APP使用个数
        sb.append(apply_result.getString("app_use_num_M1")).append(CRT001);
        //近1个月大众高粘性APP使用个数
        sb.append(apply_result.getString("app_mass_high_num_M1")).append(CRT001);
        //近1个月大众中粘性APP使用个数
        sb.append(apply_result.getString("app_mass_middle_num_M1")).append(CRT001);
        //近1个月大众低粘性APP使用个数
        sb.append(apply_result.getString("app_mass_low_num_M1")).append(CRT001);
        //近1个月大众无粘性APP使用个数
        sb.append(apply_result.getString("app_mass_none_num_M1")).append(CRT001);
        //近1个月小众高粘性APP使用个数
        sb.append(apply_result.getString("app_minor_high_num_M1")).append(CRT001);
        //近1个月小众中粘性APP使用个数
        sb.append(apply_result.getString("app_minor_middle_num_M1")).append(CRT001);
        //近1个月小众低粘性APP使用个数
        sb.append(apply_result.getString("app_minor_low_num_M1")).append(CRT001);
        //近1个月小众无粘性APP使用个数
        sb.append(apply_result.getString("app_minor_none_num_M1")).append(CRT001);
        //近3个月APP使用个数
        sb.append(apply_result.getString("app_use_num_M3")).append(CRT001);
        //近3个月大众高粘性APP使用个数
        sb.append(apply_result.getString("app_mass_high_num_M3")).append(CRT001);
        //近3个月大众中粘性APP使用个数
        sb.append(apply_result.getString("app_mass_middle_num_M3")).append(CRT001);
        //近3个月大众低粘性APP使用个数
        sb.append(apply_result.getString("app_mass_low_num_M3")).append(CRT001);
        //近3个月大众无粘性APP使用个数
        sb.append(apply_result.getString("app_mass_none_num_M3")).append(CRT001);
        //近3个月小众高粘性APP使用个数
        sb.append(apply_result.getString("app_minor_high_num_M3")).append(CRT001);
        //近3个月小众中粘性APP使用个数
        sb.append(apply_result.getString("app_minor_middle_num_M3")).append(CRT001);
        //近3个月小众低粘性APP使用个数
        sb.append(apply_result.getString("app_minor_low_num_M3")).append(CRT001);
        //近3个月小众无粘性APP使用个数
        sb.append(apply_result.getString("app_minor_none_num_M3")).append(CRT001);
        //近6个月APP使用个数
        sb.append(apply_result.getString("app_use_num_M6")).append(CRT001);
        //近6个月大众高粘性APP使用个数
        sb.append(apply_result.getString("app_mass_high_num_M6")).append(CRT001);
        //近6个月大众中粘性APP使用个数
        sb.append(apply_result.getString("app_mass_middle_num_M6")).append(CRT001);
        //近6个月大众低粘性APP使用个数
        sb.append(apply_result.getString("app_mass_low_num_M6")).append(CRT001);
        //近6个月大众无粘性APP使用个数
        sb.append(apply_result.getString("app_mass_none_num_M6")).append(CRT001);
        //近6个月小众高粘性APP使用个数
        sb.append(apply_result.getString("app_minor_high_num_M6")).append(CRT001);
        //近6个月小众中粘性APP使用个数
        sb.append(apply_result.getString("app_minor_middle_num_M6")).append(CRT001);
        //近6个月小众低粘性APP使用个数
        sb.append(apply_result.getString("app_minor_low_num_M6")).append(CRT001);
        //近6个月小众无粘性APP使用个数
        sb.append(apply_result.getString("app_minor_none_num_M6")).append(CRT001);
        //近12个月APP使用个数
        sb.append(apply_result.getString("app_use_num_M12")).append(CRT001);
        //近12个月大众高粘性APP使用个数
        sb.append(apply_result.getString("app_mass_high_num_M12")).append(CRT001);
        //近12个月大众中粘性APP使用个数
        sb.append(apply_result.getString("app_mass_middle_num_M12")).append(CRT001);
        //近12个月大众低粘性APP使用个数
        sb.append(apply_result.getString("app_mass_low_num_M12")).append(CRT001);
        //近12个月大众无粘性APP使用个数
        sb.append(apply_result.getString("app_mass_none_num_M12")).append(CRT001);
        //近12个月小众高粘性APP使用个数
        sb.append(apply_result.getString("app_minor_high_num_M12")).append(CRT001);
        //近12个月小众中粘性APP使用个数
        sb.append(apply_result.getString("app_minor_middle_num_M12")).append(CRT001);
        //近12个月小众低粘性APP使用个数
        sb.append(apply_result.getString("app_minor_low_num_M12")).append(CRT001);
        //近12个月小众无粘性APP使用个数
        sb.append(apply_result.getString("app_minor_none_num_M12")).append(CRT001);

        key.set(getKey());
        val.set(sb.toString().replace("\n", " ").replace("\r", " "));
        context.write(key, val);

        return true;
    }

    @Override
    public String getTableName() {
        return "kafka_babel_bingjian_credit_inc";
    }

    @Override
    public String getType() {
        return RecordType.ICEKREDIT_RECORD.toString();
    }

    @Override
    public String getComment() {
        return "冰鉴征信查询服务";
    }
}
